package com.twinkle.utils;

import com.twinkle.model.ProcessResult;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * @title: ShellUtil
 * @description:
 * @author: Paul
 * @date: 2023/3/7 10:49
 */
public class ShellUtil {

    /**
     * 执行shell脚本
     * @param shellPath： 脚本路径
     * @return
     */
//    public static ProcessResult execShell(String shellPath) {
//        ProcessResult result = new ProcessResult();
//        Process proc = null;
//        int exitCode = 0;
//
//        try {
//        	/*
//			附加：
//			String[] args1=new String[]{"/home/huan/anaconda2/bin/python","/home/huan/myfile/pythonfile/helloword.py"};
//            Process pr=Runtime.getRuntime().exec(args1);
//			String数组里的那一行很重要
//			首先一定要设置好你所使用的python的位置，切记不要直接使用python，因为系统会默认使用自带的python，所以一定要设置好你所使用的python的位置，否则可能会出现意想不到的问题（比如说我使用的是anaconda中的python，而ubuntu系统会默认调用自带的python，而我自带的python中并没有numpy库，所以会造成相应的代码不会执行的问题，所以设置好python的位置是很重要的）。还有就是要设置好py文件的位置，使用绝对路径。在这里插入代码片
//       还有就是可以看出，此方法可以满足我们python代码中调用第三方库的情况，简单实用。
//			*/
//            proc = Runtime.getRuntime().exec(shellPath);
//            exitCode = proc.waitFor();
//            result.setStatus(exitCode);
//            if (exitCode == 0) {
//                BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
//                String line = null;
//                StringBuilder infoBuilder = new StringBuilder();
//                while ((line = in.readLine()) != null) {
//                    infoBuilder.append(line).append("\r\n");
//                }
//                in.close();
//                result.setInfo(infoBuilder.toString());
//            } else {
//                BufferedReader in2 = new BufferedReader(new InputStreamReader( proc.getErrorStream()));
//                String line2 = null;
//                StringBuilder errorBuilder = new StringBuilder();
//                while ((line2 = in2.readLine()) != null) {
//                    errorBuilder.append(line2).append("\n");
//                }
//                in2.close();
//                result.setError(errorBuilder.toString());
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//
//        }
//        return result;
//    }
    public static ProcessResult execShell(String shellPath) {
        ProcessResult result = new ProcessResult();
        Process proc = null;
        int exitCode = 0;

        try {
        	/*
			附加：
			String[] args1=new String[]{"/home/huan/anaconda2/bin/python","/home/huan/myfile/pythonfile/helloword.py"};
            Process pr=Runtime.getRuntime().exec(args1);
			String数组里的那一行很重要
			首先一定要设置好你所使用的python的位置，切记不要直接使用python，因为系统会默认使用自带的python，所以一定要设置好你所使用的python的位置，否则可能会出现意想不到的问题（比如说我使用的是anaconda中的python，而ubuntu系统会默认调用自带的python，而我自带的python中并没有numpy库，所以会造成相应的代码不会执行的问题，所以设置好python的位置是很重要的）。还有就是要设置好py文件的位置，使用绝对路径。在这里插入代码片
       还有就是可以看出，此方法可以满足我们python代码中调用第三方库的情况，简单实用。
			*/
            proc = Runtime.getRuntime().exec(shellPath);



            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String line = null;
            StringBuilder infoBuilder = new StringBuilder();
            while ((line = in.readLine()) != null) {
                infoBuilder.append(line).append("\r\n");
            }
            in.close();
            result.setInfo(infoBuilder.toString());

            BufferedReader in2 = new BufferedReader(new InputStreamReader( proc.getErrorStream()));
            String line2 = null;
            StringBuilder errorBuilder = new StringBuilder();
            while ((line2 = in2.readLine()) != null) {
                errorBuilder.append(line2).append("\n");
            }
            in2.close();
            result.setError(errorBuilder.toString());

            exitCode = proc.waitFor();
            result.setStatus(exitCode);
        } catch (Exception e) {
            e.printStackTrace();

        }
        return result;
    }
}
